package ru.hei.pointsserver.rest

import io.swagger.v3.oas.annotations.tags.Tag
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.web.bind.annotation.*
import reactor.core.publisher.Flux
import reactor.core.publisher.Mono
import ru.hei.pointsserver.rest.entities.request.AddPoints
import ru.hei.pointsserver.rest.entities.request.AddProfessor
import ru.hei.pointsserver.rest.entities.response.HouseResponse
import ru.hei.pointsserver.service.PointsService
import java.util.*

@RestController
@RequestMapping("/points")
@Tag(name = "Points")
class PointsController @Autowired constructor(val pointsService: PointsService) {
  @GetMapping("/{house}")
  @Tag(name = "Получить текущее количество очков для указанного факультета")
  fun getPoints(@PathVariable house: String): Mono<HouseResponse> {
    return pointsService.getPoints(house)
  }

  @GetMapping("/all")
  @Tag(name = "Получить все факультеты с их текущими очками")
  fun getAllPoints(): Flux<HouseResponse> {
    return pointsService.getAllPoints()
  }

  @PostMapping("/{house}")
  @Tag(name = "Добавить/убавить очки указанному факультету (регистр не важен)")
  fun addPoint(@PathVariable house: String, @RequestBody pointsRequest: AddPoints): Mono<HouseResponse> {
    return pointsService.addPoints(house, pointsRequest)
  }

  @PostMapping("/professor")
  @Tag(name = "Создать учётную запись профессора")
  fun addProfessor(@RequestBody professor: AddProfessor): Mono<UUID> {
    return pointsService.addProfessor(professor)
  }
}